package com.lai.hospital.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lai.hospital.dto.*;
import com.lai.hospital.entity.Doctor;
import com.lai.hospital.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author : lai
 * @version V1.0
 * @Project: hospital-springboot
 * @Package com.lai.hospital.service
 * @Description: 医生服务
 * @date Date : 2022年11月24日 21:13
 */
public interface DoctorService extends IService<Doctor> {
    /**
     * 分页获取医师列表
     * @param conditionVO 条件
     * @return
     */
    PageResult<DoctorDTO> listDoctor(ConditionVO conditionVO);

    /**
     * 保存或修改医生
     * @param doctorVO
     */
    void saveOrUpdateDoctor(DoctorVO doctorVO);

    /**
     * 更新医生头像
     * @param file 文件
     * @return {@link Result<String>} 医生头像地址
     */
    String updateDoctorAvatar(MultipartFile file);

    /**
     * 删除医生
     * @param id 医生id
     */
    void deleteDoctor(Integer id);

    /**
     * 推荐医生列表
     * @param userId
     * @return
     */
    List<RecommendedDoctorDTO> listRecommendedDoctor(Integer userId);

    /**
     * 我的医生列表
     * @return
     */
    List<MyDoctorDTO> listMyDoctor(Integer userId, Integer num);

    /**
     * 获取医生信息根据id
     * @param id 医生id
     */
    DoctorDTO getDoctorInfoById(Integer id);

    /**
     * 查询出指定科室、指定日期有排班信息的医生
     * @param departmentDoctorScheduleVO 条件vo
     */
    List<Doctor> getDoctorByDepartmentAndScheduleDate(DepartmentDoctorScheduleVO departmentDoctorScheduleVO);
    /**
     * 确认预约
     * @return
     */
    ConfirmAppointmentDTO confirmAppointment(AppointmentPreviewVO appointmentPreviewVO);

    /**
     * 根据用户id查询医生信息
     */
    Doctor doctorInfo();
}
